function prt_eqs(results,vnames,fid)
% PURPOSE: Prints output from mutliple equation regressions
%          (thsls,sur)
%---------------------------------------------------
% USAGE: prt_eqs(results,vnames,fid)
% Where: results = a structure returned by:
%                  thsls,sur
%        vnames  = an optional vector of variable names
%        fid     = file-id for printing results to a file
%                  (defaults to the MATLAB command window)
%---------------------------------------------------               
%                 e.g. vnames = ['y    ',
%                                'x1   ',  NOTE: fixed width
%                                'x2   ',        like all MATLAB
%                                'cterm'];
%                 e.g. fid = fopen('ols.out','wr');
% --------------------------------------------------
% SEE ALSO: prt, plt, plt_reg(results)
%---------------------------------------------------   

% written by:
% James P. LeSage, Dept of Economics
% Texas State University-San Marcos
% 601 University Drive
% San Marcos, TX 78666
%jlesage@spatial-econometrics.com
if nargin < 1; error('wrong # of arguments to prt_eqs'); end;
if nargin > 3; error('wrong # of arguments to prt_eqs'); end;

nflag = 0;
if nargin == 1; fid = 1;            end;
if nargin == 2; nflag = 1; fid = 1; end;
if nargin == 3; nflag = 1;          end;

% --------------------------------------------------------

% error check for a structure input
if ~isstruct(results)
 error('prt_eqs requires a regression results structure');
end;


nobs = results(1).nobs;
neqs = results(1).neqs;

k=0;
for i=1:neqs;
k = k + results(i).nvar;
end;

cnt = 1;
cntn = 1;
eqname = [];
for neqn=1:neqs;

nvar = results(neqn).nvar;

% Make up generic variable names
 Vname = [];
 for i=1:nvar
        Vname{i} = str2mat(['variable   ',num2str(i)]);
 end;
if (nflag == 1) % the user supplied variable names
  [tst_n junk] = size(vnames);
  if tst_n ~= k+neqs;
   fprintf(fid,'Wrong # of variable names in prt_eqs -- check vnames argument \n');
   fprintf(fid,'will use generic variable names \n');
   nflag = 0;
  else,
   Vname = [];
    for i=1:nvar
    Vname{i} = vnames(cntn+i,:);
    end;
  end;
end; % end of nflag issue

switch results(1).meth

case {'thsls'} % <=================== thsls regressions


fprintf(fid,'\n');

fprintf(fid,'Three Stage Least-squares Estimates -- Equation %3d \n',neqn);

if (nflag == 1)
fprintf(fid,'Dependent Variable = %16s \n',vnames(cntn,:));
end;
fprintf(fid,'R-squared      = %9.4f \n',results(neqn).rsqr);
fprintf(fid,'Rbar-squared   = %9.4f \n',results(neqn).rbar);
fprintf(fid,'sigma^2        = %9.4f \n',results(neqn).sige);
fprintf(fid,'Durbin-Watson  = %9.4f \n',results(neqn).dw);
fprintf(fid,'Nobs, Nvars    = %6d,%6d \n',results(1).nobs,results(neqn).nvar);
fprintf(fid,'***************************************************************\n');

% -------- end of thsls case

case {'sur'} % <=================== sur regressions


fprintf(fid,'\n');

fprintf(fid,'Seemingly Unrelated Regression -- Equation %3d \n',neqn);

if (nflag == 1)
fprintf(fid,'Dependent Variable = %16s \n',vnames(cntn,:));
end;
fprintf(fid,'System R-sqr   = %9.4f \n',results(neqs).srsqr);
fprintf(fid,'R-squared      = %9.4f \n',results(neqn).rsqr);
fprintf(fid,'Rbar-squared   = %9.4f \n',results(neqn).rbar);
fprintf(fid,'sigma^2        = %9.4f \n',results(neqn).sige);
fprintf(fid,'Durbin-Watson  = %9.4f \n',results(neqn).dw);
fprintf(fid,'Nobs, Nvars    = %6d,%6d \n',results(1).nobs,results(neqn).nvar);
fprintf(fid,'***************************************************************\n');

% -------- end of sur case

otherwise
error('structure unknown to prt_eqs');
end;


tmp = [results(neqn).beta results(neqn).tstat results(neqn).tprob];
% print out results

vstring = 'Variable';
bstring = 'Coefficient';
tstring = 't-statistic';
pstring = 't-probability';

cnames = strvcat(bstring,tstring,pstring);
rnames = vstring;
for i=1:nvar
rnames = strvcat(rnames,Vname{i});
end;
fmt = '%16.6f';
in.fid = fid;
in.fmt = fmt;
in.cnames = cnames;
in.rnames = rnames;

mprint(tmp,in);
if nflag == 1
eqname{neqn} = vnames(cntn,:);
end;
cntn = cntn+nvar+1;
cnt = cnt+1;

end; % end of loop over equations

% print cross-equation correlation structure

sig =   results(1).sigma;

fprintf(fid,'Cross-equation sig(i,j) estimates \n');
cnames = [];
for i=1:neqs;
 if nflag == 0
 cnames = [cnames
          'eq ' num2str(i)];
 else
 cnames = [cnames
           eqname{i}];
 end;
end;
cnames = strvcat(cnames);
fmt = '%9.4f';
rnames = strvcat('equation',cnames);          
ins.fmt = fmt;
ins.cnames = cnames;
ins.rnames = rnames;
ins.fid = fid;

mprint(sig,ins);
fprintf(fid,'\n');

ccor = results(1).ccor;
ins.fmt = '%9.4f';

fprintf(fid,'Cross-equation correlations \n');

mprint(ccor,ins);



